home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / preccx / prccx240.lha / fib.y < prev    next >
Text File  |  1993-05-28  |  1KB  |  77 lines

  1. /* FIBONNACI - an example parser (usage at the end of this file)
  2.  
  3.  
  4. I suggest you
  5.  
  6. a) run
  7.  
  8.    preccx  fib.y fib.c
  9.  
  10. b) compile
  11.  
  12.    gcc -ansi -o fib fib.c -L . -lcc -D_STDC_
  13.        ^^^^^
  14.  
  15. c) run
  16.  
  17.    fib
  18.  
  19. I have seen slightly different incantations for the compiler in
  20. different OS's, and I am supposing that you put the libcc.a that
  21. comes with preccx in this directory. You may need some more flags
  22. which specify your target machine type (e.g. -D__hp9000s300).
  23. */
  24.  
  25.  
  26. # define TOKEN char
  27. # define VALUE char*
  28.  
  29. # define BEGIN call_mode=1;printf("hi!\n");
  30.  
  31. # include "ccx.h"
  32.  
  33. # define INT(x) (int)(x)
  34.  
  35. char shortbuffer[32];
  36. int  shortnum;
  37. PARAM longnum;
  38.  
  39. # define FIRSTDIGIT(n) (0==n)?(PARAM)0:\
  40. (sprintf(shortbuffer,"%d",(int)n),\
  41. shortbuffer[1]=0,\
  42. sscanf(shortbuffer,"%d",&shortnum),\
  43. longnum=shortnum\
  44. )
  45. # define LASTDIGITS(n) (0==n)?(PARAM)0:\
  46. (sprintf(shortbuffer,"%d",(int)n),\
  47. sscanf(&shortbuffer[1],"%d",&shortnum),\
  48. longnum=shortnum\
  49. )
  50.  
  51. # define TOTL printf("%d terms OK\nNext terms are %d,%d,..\n",n,a,b)
  52.  
  53. MAIN(fibber)
  54. @fibber   = fibs*
  55.  
  56. @fibs     = fib((PARAM)1,(PARAM)1,(PARAM)0) $!
  57.  
  58. @fib(a,b,n) = number(a) <','> fib(b,a+b,n+(PARAM)1) 
  59. @            | <'.'> <'.'> :TOTL;:
  60.  
  61. @number(n)= digit(n)       
  62. @      | digit(FIRSTDIGIT(n)) number(LASTDIGITS(n))
  63.  
  64. @digit(n) = <n+'0'>               :/* digit rep of small n */:
  65.  
  66. /* ------------------ Example inputs: ----------------
  67.  
  68. 1,1,2,3,5,..
  69. (OK)
  70. 1,1,2,3,5,8,13,21,..
  71. (OK)
  72. 1,1,2,3,5,8,13,21,34,51,85,..
  73. error: failed parse: probable error at <>1,85,..
  74.  
  75. */
  76.  
  77.